今天要把模型給做出來,一個好的模型對我們幫助很大,它應該大小適中,過大或過小的模型會有什麼影響,我們之後會談到,今天先從簡單的模型開始即可。
以下是一個Sequential模型的開始,Keras提供的一種簡單的模型搭建方法,將我們所需要的層一直疊加上去即可,另一種Functional的方式允許我們搭建較複雜的模型,之後會談到。
from tensorflow.keras.models import Sequential
model = Sequential()
這個模型的名稱叫多層感知器,Multilayer perceptron, MLP,它包含了三個基本結構,輸入層、隱藏層、輸出層。模型的第一層是輸入層,輸入一維長度為784的向量,Keras會為我們的輸入數量加1,這一個額外的輸入視作為偏差使用,它的輸入會被固定為1。
from tensorflow.keras.layers import InputLayer, Dense
model.add(
InputLayer(
input_shape = (784, )
)
)
接下來是模型的隱藏層,隱藏層可以包含一個或多個的層,本例中只用一層,擁有64個神經元,因此產生了(784+1)X64=50240個權重,每個神經元將與前一層的所有神經元連接,如果層與層之間採用此種連接方式則可以被稱作全連接層。
model.add(
Dense(
units = 64,
activation = 'relu'
)
)
最後是輸出層,模型的最後一層即為輸出層,我們要訓練10個輸出0~1的二元分類器,因此我們將神經元的數目設為10個,Keras不會為最後一層的輸出添加偏差,因此大家不用擔心會出現11個分類器,此層也將與前一層的所有神經元連接,權重數目為(64+1)X10=650個。
model.add(
Dense(
units = 10,
activation = 'softmax'
)
)
接著我們要確認一些模型訓練所使用的方法,過程中使用的參數等等,這裡未解釋的參數包含之前看到的activation,將留到之後解釋。
model.compile(
optimizer = 'adam',
loss = 'categorical_crossentropy',
metrics = ['accuracy']
)
可以用以下的方法來觀察一下剛才搭建的模型,明天我們就可以開始訓練了。
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 50240
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 50,890
Trainable params: 50,890
Non-trainable params: 0
_________________________________________________________________